unsigned char inb(unsigned short _port)
{
	// "=a" (result) means: put AL register in variable result when finished
	// "d" (_port) means: load EDX with _port
	unsigned char result;
	__asm__  ("in %%dx, %%al" : "=a" (result) : "d" (_port));
	return result;
}

void outb(unsigned short _port, unsigned char _data)
{
	// "a" (_data) means: load EAX with _data
	// "d" (_port) means: load EDX with _port
	__asm__ ("out %%al, %%dx" : :"a" (_data), "d" (_port));
}

